package cn.demoncat.util.mybatis.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.demoncat.util.mybatis.constant.DataSourceLogConstant;
import cn.demoncat.util.mybatis.constant.DataSourceTypeConstant;

/**
 * 数据源类型持有器（保存当前线程使用的数据源类型）
 * 
 * @author 延晓磊
 *
 * @since 2017年10月13日
 */
public class DataSourceHolder {
	
	private static final Logger LOG = LoggerFactory.getLogger(DataSourceHolder.class);
	
	//局部线程变更，保存当前线程使用的数据源类型 
    private static final ThreadLocal<String> HOLDER = new ThreadLocal<>();
    
    /**
     * 设置为读库类型 
     * 
     * @author 延晓磊
     *
     * @since 2017年10月13日
     */
    public static void setRead() {  
    	HOLDER.set(DataSourceTypeConstant.READ);  
    	LOG.info(DataSourceLogConstant.CHANGE, DataSourceTypeConstant.READ);  
    }  
  
    /**
     * 设置为写库类型 
     * 
     * @author 延晓磊
     *
     * @since 2017年10月13日
     */
    public static void setWrite() {  
    	HOLDER.set(DataSourceTypeConstant.WRITE);  
    	LOG.info(DataSourceLogConstant.CHANGE, DataSourceTypeConstant.WRITE);    
    }   
    
    /**
     * 获取当前数据源类型
     * 
     * @return
     * 
     * @author 延晓磊
     *
     * @since 2017年10月13日
     */
    public static String get() {  
        return HOLDER.get();  
    }  
    
    /**
     * 清空当前数据源类型
     * 
     * @author 延晓磊
     *
     * @since 2017年10月13日
     */
    public static void clean(){
    	HOLDER.remove();
    }
}
